/****************************************************************************
 *  _____       ______  _____
 * |_   _|     |  ____|/ ____|
 *   | |  _ __ | |__  | (___    Institute of Embedded Systems
 *   | | | '_ \|  __|  \___ \   Zürcher Hochschule für Angewandte
 *  _| |_| | | | |____ ____) |  Wissenschaften
 * |_____|_| |_|______|_____/   8401 Winterthur, Switzerland
 *
 ****************************************************************************
 *
 * @version $Rev: 508 $
 * @author  $Author: mcrescenti $
 * @date    $Date: 2014-08-14 15:11:25 +0200 (jeu., 14 août 2014) $
 *
 ***************************************************************************/

#ifndef __PTP2_DEFAULT_H__
#define __PTP2_DEFAULT_H__

//#include "hcpp/ptp2_types.h"
#include "hcpp/ptp2_log.h"
//#include "hcpp/ptp2_bmc_algorithm.h"

//#include "packet/net_address.h"

#include <stdint.h>
#include <stdbool.h>

/*** ENET HAL ***************************************************************/
uint32_t                        ptp2_default_enet_rx_delay(void);
uint32_t                        ptp2_default_enet_tx_delay(void);
uint32_t                        ptp2_default_enet_rx_delay_slave(void);
uint32_t                        ptp2_default_enet_tx_delay_slave(void);

/*** SYSCONF HAL ************************************************************/
bool                            ptp2_default_sysconf_delay_resp_to_all(void);

/*** PROFILE ****************************************************************/
//ptp2_profile_t                  ptp2_default_profile(void);

/*** PORT *******************************************************************/
bool                            ptp2_default_port_ip_use_dhcp(void);
bool                            ptp2_default_port_vlan_enabled(void);
uint16_t                        ptp2_default_port_vlan_vid(void);
uint8_t                         ptp2_default_port_vlan_pcp(void);
//ipv4_address_t                 *ptp2_default_port_ipv4_address(void);
//ipv4_address_t                 *ptp2_default_port_ipv4_gateway(void);
//ipv4_address_t                 *ptp2_default_port_ipv4_netmask(void);
//ipv6_address_t                 *ptp2_default_port_ipv6_address(void);
//mac_address_t                  *ptp2_default_port_mac_address(void);
//ptp2_address_type_t             ptp2_default_port_multicast_address_type(void);
//ipv4_address_t                 *ptp2_default_port_multicast_ipv4_primary_ip(void);
//ipv4_address_t                 *ptp2_default_port_multicast_ipv4_pdelay_ip(void);
//ipv6_address_t                 *ptp2_default_port_multicast_ipv6_primary_ip(void);
//ipv6_address_t                 *ptp2_default_port_multicast_ipv6_pdelay_ip(void);
//mac_address_t                  *ptp2_default_port_multicast_ipv4_primary_mac(void);
//mac_address_t                  *ptp2_default_port_multicast_ipv4_pdelay_mac(void);
//mac_address_t                  *ptp2_default_port_multicast_ipv6_primary_mac(void);
//mac_address_t                  *ptp2_default_port_multicast_ipv6_pdelay_mac(void);
//mac_address_t                  *ptp2_default_port_multicast_ether_primary_mac(void);
//mac_address_t                  *ptp2_default_port_multicast_ether_pdelay_mac(void);

uint8_t                         ptp2_default_port_dscp_ptp_event(void);
uint8_t                         ptp2_default_port_dscp_ptp_general(void);

/*** DEFAULT DATASET ********************************************************/
bool                            ptp2_default_default_ds_two_step_clock(void);
//ptp2_clock_identity_t          *ptp2_default_default_ds_clock_identity(void);
uint8_t                         ptp2_default_default_ds_port_count(void);
uint8_t                         ptp2_default_default_ds_clock_class(void);
uint8_t                         ptp2_default_default_ds_clock_accuracy(void);
uint16_t                        ptp2_default_default_ds_clock_variance(void);
uint8_t                         ptp2_default_default_ds_priority1(void);
uint8_t                         ptp2_default_default_ds_priority2(void);
uint8_t                         ptp2_default_default_ds_domain_number(void);
bool                            ptp2_default_default_ds_slave_only(void);
bool                            ptp2_default_default_ds_unicast_mode(void);
bool                            ptp2_default_default_ds_signaling_enabled(void);

/*** TIME PROPERTIES DATASET ************************************************/
int16_t                         ptp2_default_time_properties_ds_current_utc_offset(void);
bool                            ptp2_default_time_properties_ds_current_utc_offset_valid(void);
bool                            ptp2_default_time_properties_ds_leap59(void);
bool                            ptp2_default_time_properties_ds_leap61(void);
bool                            ptp2_default_time_properties_ds_time_traceable(void);
bool                            ptp2_default_time_properties_ds_frequency_traceable(void);
bool                            ptp2_default_time_properties_ds_ptp_timescale(void);
//ptp2_time_source_t              ptp2_default_time_properties_ds_time_source(void);

/*** PORT DATASET ***********************************************************/
uint16_t                        ptp2_default_port_ds_port_number(void);
//ptp2_port_state_t               ptp2_default_port_ds_port_state(void);
int8_t                          ptp2_default_port_ds_log_min_delay_req_interval(void);
//ptp2_time_interval_t           *ptp2_default_port_ds_peer_mean_path_delay(void);
int8_t                          ptp2_default_port_ds_log_announce_interval(void);
uint8_t                         ptp2_default_port_ds_announce_receipt_timeout(void);
uint8_t                         ptp2_default_port_ds_foreign_master_threshold(void);
uint8_t                         ptp2_default_port_ds_foreign_master_time_window(void);
int8_t                          ptp2_default_port_ds_log_sync_interval(void);
//ptp2_delay_mechanism_t          ptp2_default_port_ds_delay_mechanism(void);
int8_t                          ptp2_default_port_ds_log_min_pdelay_req_interval(void);
uint8_t                         ptp2_default_port_ds_version_number(void);
bool                            ptp2_default_port_ds_alternate_master(void);
bool                            ptp2_default_port_ds_profile_specific1(void);
bool                            ptp2_default_port_ds_profile_specific2(void);

/*** FOREIGN MASTER *********************************************************/
uint32_t                        ptp2_default_announce_seq_nr_overflow_window_size(void);

/*** NODE TABLE *************************************************************/
uint32_t                        ptp2_default_node_table_lut_write_interval(void);
uint32_t                        ptp2_default_node_table_check_lease_duration_interval(void);

/*** LOG ********************************************************************/

bool                            ptp2_default_log(void);
ptp2_log_level_t                ptp2_default_log_level_master(void);
ptp2_log_level_t                ptp2_default_log_level_log(void);
ptp2_log_level_t                ptp2_default_log_level_hal_enet(void);
ptp2_log_level_t                ptp2_default_log_level_hal_timer(void);
ptp2_log_level_t                ptp2_default_log_level_hal_ptp_time(void);
ptp2_log_level_t                ptp2_default_log_level_hal_slavemgm(void);
ptp2_log_level_t                ptp2_default_log_level_hal_sysconf(void);
ptp2_log_level_t                ptp2_default_log_level_hal_tod(void);
ptp2_log_level_t                ptp2_default_log_level_hal_esmc(void);
ptp2_log_level_t                ptp2_default_log_level_fsm(void);
ptp2_log_level_t                ptp2_default_log_level_port(void);
ptp2_log_level_t                ptp2_default_log_level_task(void);
ptp2_log_level_t                ptp2_default_log_level_task_queue(void);
ptp2_log_level_t                ptp2_default_log_level_packet_ethernet(void);
ptp2_log_level_t                ptp2_default_log_level_packet_arp(void);
ptp2_log_level_t                ptp2_default_log_level_packet_ipv4(void);
ptp2_log_level_t                ptp2_default_log_level_packet_ipv6(void);
ptp2_log_level_t                ptp2_default_log_level_packet_icmp(void);
ptp2_log_level_t                ptp2_default_log_level_packet_udp(void);
ptp2_log_level_t                ptp2_default_log_level_packet_ptp2(void);
ptp2_log_level_t                ptp2_default_log_level_packet_ptp2_signaling(void);
ptp2_log_level_t                ptp2_default_log_level_packet_ptp2_announce(void);
ptp2_log_level_t                ptp2_default_log_level_packet_analyzer(void);
ptp2_log_level_t                ptp2_default_log_level_packet_assembler(void);
ptp2_log_level_t                ptp2_default_log_level_ping_table(void);
ptp2_log_level_t                ptp2_default_log_level_arp_table(void);
ptp2_log_level_t                ptp2_default_log_level_node_table(void);
ptp2_log_level_t                ptp2_default_log_level_shadow_table(void);
ptp2_log_level_t                ptp2_default_log_level_profile();
ptp2_log_level_t                ptp2_default_log_level_bmca(void);
ptp2_log_level_t                ptp2_default_log_level_tod(void);
ptp2_log_level_t                ptp2_default_log_level_dataset_default(void);
ptp2_log_level_t                ptp2_default_log_level_dataset_current(void);
ptp2_log_level_t                ptp2_default_log_level_dataset_parent(void);
ptp2_log_level_t                ptp2_default_log_level_dataset_timeprop(void);
ptp2_log_level_t                ptp2_default_log_level_dataset_port(void);
ptp2_log_level_t                ptp2_default_log_level_dataset_foreign_master(void);
ptp2_log_level_t                ptp2_default_log_level_spi_master(void);
ptp2_log_level_t                ptp2_default_log_level_spi_slave(void);
ptp2_log_level_t                ptp2_default_log_level_pps_pll(void);

#endif
